Fork an article version. Creates a new draft version from the currently published version.
  • 12 May 2026
  • 11 Minutes to read
  • Contributors
  • Dark
    Light

Fork an article version. Creates a new draft version from the currently published version.

  • Dark
    Light

Article summary

Post
/v3/projects/{project_id}/articles/{article_id}/fork

Creates a new draft version based on the currently published content. Use this when you need to make edits without affecting the live published version. If a draft version already exists, a 409 Conflict error is returned. Alternatively, set auto_fork to true on the update endpoint to fork automatically when needed.

Security
OAuth

All V3 endpoints require a Bearer token. Generate tokens in the Document360 portal under Settings > API Tokens. Tokens are project-scoped, require the customerApi scope, and do not expire by default. Tokens can be revoked at any time from the portal. Include the token in every request: Authorization: Bearer <your-token>. Alternatively, use the Authorize button below to sign in via OAuth2 Authorization Code flow with PKCE.

FlowAuthorization Code
Authorization URLhttps://identity.document360.net/connect/authorize
Token URLhttps://identity.document360.net/connect/token
Scopes:
customerApiDocument360 Customer API
Path parameters
project_id
string (uuid) Required

The unique identifier of the project. Retrieve project IDs from GET /v3/projects.

Example9a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d
article_id
string (uuid) Required

The unique identifier of the article. Retrieve article IDs from GET /v3/projects/{project_id}/articles.

Example9a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d
Responses
201

Article version forked successfully.

Headers
Location
string
URL of the newly created resource.
Article version forked successfully

A new draft version has been created from the published content. The response shows the new draft version.

{
  "data": {
    "id": "9a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d",
    "title": "Getting Started with Single Sign-On",
    "content": "# Introduction\nThis guide walks you through configuring SSO for your organization.",
    "html_content": null,
    "category_id": "f4a5b6c7-d8e9-0a1b-2c3d-4e5f6a7b8c9d",
    "project_version_id": "1c2d3e4f-5a6b-7c8d-9e0f-a1b2c3d4e5f6",
    "version_number": 3,
    "public_version": 2,
    "latest_version": 3,
    "enable_rtl": false,
    "hidden": false,
    "status": 0,
    "order": 0,
    "created_by": "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d",
    "authors": [],
    "created_at": "2025-08-16T10:00:00Z",
    "modified_at": "2025-08-16T10:00:00Z",
    "modified_by": "a1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d",
    "slug": "getting-started-with-single-sign-on",
    "is_fallback_content": false,
    "description": null,
    "category_type": null,
    "content_type": 0,
    "is_shared_article": false,
    "translation_option": "none",
    "url": null,
    "current_workflow_status_id": null,
    "lang_code": "en",
    "available_languages": null,
    "settings": null
  },
  "success": true,
  "request_id": "req_abc123def456",
  "errors": null,
  "warnings": null
}
Expand All
object

Generic API response wrapper containing typed data.

data
object

Response data payload.

id
string (uuid) | null

The unique identifier of the article.

Example9a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d
title
string | null

The title of the article.

ExampleGetting Started with Single Sign-On
content
string | null

The raw content of the article in its source format.

Example# Introduction\nThis guide walks you through configuring SSO for your organization.
html_content
string | null

The rendered HTML content of the article.

Example<h1>Introduction</h1><p>This guide walks you through configuring SSO.</p>
category_id
string | null

The identifier of the category this article belongs to. Use this value with GET /v3/projects/{projectId}/categories/{categoryId} to retrieve category details.

Examplef4a5b6c7-d8e9-0a1b-2c3d-4e5f6a7b8c9d
project_version_id
string | null

The project version this article belongs to. Corresponds to a version from GET /v3/projects/{projectId}/project-versions.

Example1c2d3e4f-5a6b-7c8d-9e0f-a1b2c3d4e5f6
version_number
integer (int32)

The current version number of the article.

Example3
public_version
integer (int32) | null

The latest published version number, or null if the article has never been published.

Example2
latest_version
integer (int32)

The latest version number including drafts.

Example3
enable_rtl
boolean

Whether right-to-left text direction is enabled.

Examplefalse
hidden
boolean

Whether the article is hidden from readers.

Examplefalse
status
string

The publication status of the article. Possible values: 0 = Draft, 3 = Published.

Valid values[ "draft", "published", "forked", "unpublished" ]
order
integer (int32)

The display order of the article within its category.

Example5
created_by
string | null

The user ID of the original article creator. For full author details including name and avatar, see the authors array. Corresponds to a user from GET /v3/projects/{projectId}/users.

Examplea1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d
authors
Array of object (AuthorResponse) | null

The list of contributors to this article, including the original creator and any subsequent editors.

object

Author information for an article.

id
string (uuid) | null

The unique identifier of the author.

Examplea1b2c3d4-e5f6-7a8b-9c0d-1e2f3a4b5c6d
first_name
string | null

The first name of the author.

ExampleJane
last_name
string | null

The last name of the author.

ExampleDoe
email
string (email) | null

The email address of the author.

profile_logo_url
string | null

The URL of the author's profile image.

Examplehttps://cdn.example.com/avatars/jane-doe.png
created_at
string (date-time)

The date and time the article was created.

Example2025-06-01T09:00:00Z
modified_at
string (date-time)

The date and time the article was last modified.

Example2025-08-15T14:30:00Z
modified_by
string | null

The user ID of who last modified this article. Corresponds to a user from GET /v3/projects/{projectId}/users.

Exampleb2c3d4e5-f6a7-8b9c-0d1e-2f3a4b5c6d7e
slug
string | null

The URL slug for the article.

Examplegetting-started-with-single-sign-on
is_fallback_content
boolean

Whether the content is a fallback from the default language.

Examplefalse
description
string | null

A brief description of the article.

ExampleLearn how to configure single sign-on authentication for your knowledge base.
category_type
string | null

The type of category this article belongs to. Possible values: 0 = Folder, 1 = Page, 2 = Index.

Valid values[ "folder", "page", "index" ]
content_type
string | null

The editor content type of the article. Possible values: 0 = Markdown, 1 = Wysiwyg (rich text), 2 = Block.

Valid values[ "markdown", "wysiwyg", "block" ]
is_shared_article
boolean

Whether the article is shared across multiple projects.

Examplefalse
translation_option
string

The translation status of the article. Possible values: 0 = None, 1 = NeedTranslation, 2 = Translated, 3 = InProgress.

Valid values[ "none", "needTranslation", "translated", "inProgress" ]
url
string (uri) | null

The full URL of the article.

Examplehttps://docs.example.com/en/articles/getting-started-with-single-sign-on
current_workflow_status_id
string | null

The current workflow status identifier. Retrieve available statuses from GET /v3/projects/{projectId}/workflow-statuses.

Exampleb7e2a1d4-3f56-4c89-9d0e-1a2b3c4d5e6f
lang_code
string | null

The language code of this article version.

Exampleen
available_languages
Array of object (AvailableLanguage) | null

The list of languages this article is available in.

object

Represents a language in which an article is available.

lang_code
string | null

The language code (e.g., "en", "fr").

Examplefr
url
string (uri) | null

The URL of the article in this language.

Examplehttps://docs.example.com/fr/articles/getting-started-with-single-sign-on
translation_status
string

The translation status for this language. Possible values: 0 = None, 1 = NeedTranslation, 2 = Translated, 3 = InProgress.

Valid values[ "none", "needTranslation", "translated", "inProgress" ]
settings
object | null

A subset of article settings (SEO title, description, external search exclusion). For full settings including tags, related articles, and display options, use GET /v3/projects/{projectId}/articles/{articleId}/settings.

seo_title
string | null

The custom SEO title for search engines.

ExampleSSO Setup Guide - Product Documentation
description
string | null

The meta description for search engines.

ExampleStep-by-step instructions for configuring single sign-on with SAML or OIDC providers.
exclude_from_external_search
boolean

Whether the article is excluded from external search engine indexing.

Examplefalse
success
boolean

Whether the API request was successful.

request_id
string

Unique identifier for request tracing and correlation.

Min length1
errors
Array of object (ApiError) | null

List of errors if the request failed.

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

List of non-fatal warnings from the request.

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1
401

Authentication token is missing or invalid.

Headers
WWW-Authenticate
string
Indicates the authentication scheme required. Returns `Bearer` with optional `error` and `error_description` parameters per RFC 6750.
Missing or invalid token

Authentication token is missing or invalid.

{
  "type": "https://developer.document360.com/errors/unauthorized",
  "title": "Unauthorized.",
  "status": 401,
  "detail": "The authentication token is missing or has expired.",
  "instance": null,
  "trace_id": "req_abc123def456",
  "errors": [
    {
      "code": "UNAUTHORIZED",
      "message": "Bearer token is missing or invalid.",
      "field": null,
      "details": null
    }
  ],
  "warnings": null
}
Expand All
object

RFC 7807 Problem Details response for V3 API errors. Content-Type: application/problem+json

type
string

URI reference identifying the error type (links to documentation).

Min length1
title
string

Short human-readable summary of the error type.

Min length1
status
integer (int32)

HTTP status code.

detail
string | null

Human-readable explanation specific to this occurrence.

instance
string | null

URI of the request that generated the error.

trace_id
string | null

Request trace identifier for correlation.

errors
Array of object (ApiError) | null

Structured list of specific errors (extension field).

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

Non-fatal warnings (extension field).

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1
404

Article not found.

Resource not found

The requested resource was not found.

{
  "type": "https://developer.document360.com/errors/not-found",
  "title": "Not Found.",
  "status": 404,
  "detail": "The requested resource does not exist or has been deleted.",
  "instance": null,
  "trace_id": "req_abc123def456",
  "errors": [
    {
      "code": "RESOURCE_NOT_FOUND",
      "message": "The requested resource was not found.",
      "field": null,
      "details": null
    }
  ],
  "warnings": null
}
Expand All
object

RFC 7807 Problem Details response for V3 API errors. Content-Type: application/problem+json

type
string

URI reference identifying the error type (links to documentation).

Min length1
title
string

Short human-readable summary of the error type.

Min length1
status
integer (int32)

HTTP status code.

detail
string | null

Human-readable explanation specific to this occurrence.

instance
string | null

URI of the request that generated the error.

trace_id
string | null

Request trace identifier for correlation.

errors
Array of object (ApiError) | null

Structured list of specific errors (extension field).

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

Non-fatal warnings (extension field).

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1
409

Article already has a draft version.

Resource conflict

The request conflicts with the current state of the resource.

{
  "type": "https://developer.document360.com/errors/conflict",
  "title": "Conflict.",
  "status": 409,
  "detail": "The resource is in a state that conflicts with this operation.",
  "instance": null,
  "trace_id": "req_abc123def456",
  "errors": [
    {
      "code": "CONFLICT",
      "message": "A draft version already exists for this resource.",
      "field": null,
      "details": null
    }
  ],
  "warnings": null
}
Expand All
object

RFC 7807 Problem Details response for V3 API errors. Content-Type: application/problem+json

type
string

URI reference identifying the error type (links to documentation).

Min length1
title
string

Short human-readable summary of the error type.

Min length1
status
integer (int32)

HTTP status code.

detail
string | null

Human-readable explanation specific to this occurrence.

instance
string | null

URI of the request that generated the error.

trace_id
string | null

Request trace identifier for correlation.

errors
Array of object (ApiError) | null

Structured list of specific errors (extension field).

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

Non-fatal warnings (extension field).

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1
429

Rate limit exceeded. Retry after the duration specified in the Retry-After header.

Headers
Retry-After
integer
Number of seconds to wait before retrying the request. Use exponential backoff with jitter for optimal retry behavior.
X-RateLimit-Limit
integer
The maximum number of requests allowed in the current time window. Limits are applied per API token per project.
X-RateLimit-Remaining
integer
The number of requests remaining in the current time window. When this reaches 0, subsequent requests will receive a 429 response.
X-RateLimit-Reset
integer
The UTC epoch timestamp (in seconds) when the current rate limit window resets.
Rate limit exceeded

Rate limit exceeded.

{
  "type": "https://developer.document360.com/errors/too-many-requests",
  "title": "Too Many Requests.",
  "status": 429,
  "detail": "Rate limit exceeded. Retry after the duration specified in the Retry-After header.",
  "instance": null,
  "trace_id": "req_abc123def456",
  "errors": [
    {
      "code": "TOO_MANY_REQUESTS",
      "message": "Rate limit exceeded. Retry after the duration specified in the Retry-After header.",
      "field": null,
      "details": null
    }
  ],
  "warnings": null
}
Expand All
object

RFC 7807 Problem Details response for V3 API errors. Content-Type: application/problem+json

type
string

URI reference identifying the error type (links to documentation).

Min length1
title
string

Short human-readable summary of the error type.

Min length1
status
integer (int32)

HTTP status code.

detail
string | null

Human-readable explanation specific to this occurrence.

instance
string | null

URI of the request that generated the error.

trace_id
string | null

Request trace identifier for correlation.

errors
Array of object (ApiError) | null

Structured list of specific errors (extension field).

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

Non-fatal warnings (extension field).

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1
500

An unexpected server error occurred.

Unexpected server error

Unexpected server error.

{
  "type": "https://developer.document360.com/errors/internal-error",
  "title": "Internal Server Error.",
  "status": 500,
  "detail": "An unexpected error occurred. Please try again or contact support.",
  "instance": null,
  "trace_id": "req_abc123def456",
  "errors": [
    {
      "code": "INTERNAL_SERVER_ERROR",
      "message": "An unexpected error occurred.",
      "field": null,
      "details": null
    }
  ],
  "warnings": null
}
Expand All
object

RFC 7807 Problem Details response for V3 API errors. Content-Type: application/problem+json

type
string

URI reference identifying the error type (links to documentation).

Min length1
title
string

Short human-readable summary of the error type.

Min length1
status
integer (int32)

HTTP status code.

detail
string | null

Human-readable explanation specific to this occurrence.

instance
string | null

URI of the request that generated the error.

trace_id
string | null

Request trace identifier for correlation.

errors
Array of object (ApiError) | null

Structured list of specific errors (extension field).

object

Represents an error returned by the API.

code
string

Machine-readable error code (e.g. VALIDATION_ERROR, RESOURCE_NOT_FOUND).

Min length1
message
string

Human-readable error message.

Min length1
field
string | null

The request field that caused the error, if applicable.

details
string | null

Additional context about the error.

warnings
Array of object (ApiWarning) | null

Non-fatal warnings (extension field).

object

Represents a non-fatal warning from the API.

code
string

Machine-readable warning code.

Min length1
message
string

Human-readable warning message.

Min length1

Was this article helpful?